From: Sebastian Wick Date: Sat, 21 Jun 2025 22:12:09 +0000 (+0200) Subject: shellDBus: Add the Shell.Brightness interface X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~116^2^2~1 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=f3932f472d0165ba8e3a17742c338d11252ed8d5;p=gnome-shell.git shellDBus: Add the Shell.Brightness interface This lets gnome-settings-daemon control dimming for power saving, and set a auto brightness target for brightness sensors. This finally let's us drop direct backlight control from g-s-d. Part-of: --- diff --git a/data/dbus-interfaces/meson.build b/data/dbus-interfaces/meson.build index 81281b64d..43357070f 100644 --- a/data/dbus-interfaces/meson.build +++ b/data/dbus-interfaces/meson.build @@ -1,4 +1,5 @@ dbus_interfaces = [ + 'org.gnome.Shell.Brightness.xml', 'org.gnome.Shell.Extensions.xml', 'org.gnome.Shell.Introspect.xml', 'org.gnome.Shell.PadOsd.xml', diff --git a/data/dbus-interfaces/org.gnome.Shell.Brightness.xml b/data/dbus-interfaces/org.gnome.Shell.Brightness.xml new file mode 100644 index 000000000..a0e639728 --- /dev/null +++ b/data/dbus-interfaces/org.gnome.Shell.Brightness.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/gnome-shell-dbus-interfaces.gresource.xml b/data/gnome-shell-dbus-interfaces.gresource.xml index 69ce52927..9866ac87c 100644 --- a/data/gnome-shell-dbus-interfaces.gresource.xml +++ b/data/gnome-shell-dbus-interfaces.gresource.xml @@ -40,6 +40,7 @@ org.gnome.SettingsDaemon.Power.Keyboard.xml org.gnome.SettingsDaemon.Rfkill.xml org.gnome.Shell.AudioDeviceSelection.xml + org.gnome.Shell.Brightness.xml org.gnome.Shell.CalendarServer.xml org.gnome.Shell.ClocksIntegration.xml org.gnome.Shell.Extensions.xml diff --git a/js/ui/main.js b/js/ui/main.js index cd2417a6e..0de79d6a1 100644 --- a/js/ui/main.js +++ b/js/ui/main.js @@ -98,6 +98,7 @@ export let breakManagerDispatcher = null; export let timeLimitsManager = null; export let timeLimitsDispatcher = null; export let brightnessManager = null; +export let brightnessDBus = null; let _startDate; let _defaultCssStylesheet = null; @@ -261,6 +262,7 @@ async function _initializeUI() { timeLimitsDispatcher = new TimeLimitsManager.TimeLimitsDispatcher(timeLimitsManager); brightnessManager = new BrightnessManager.BrightnessManager(); + brightnessDBus = new ShellDBus.BrightnessDBus(brightnessManager); global.connect('shutdown', () => { // Block shutdown until the session history file has been written diff --git a/js/ui/shellDBus.js b/js/ui/shellDBus.js index 4f219e21f..9b91c7fb4 100644 --- a/js/ui/shellDBus.js +++ b/js/ui/shellDBus.js @@ -17,6 +17,7 @@ const GnomeShellIface = loadInterfaceXML('org.gnome.Shell'); const GnomeShellExtensionsIface = loadInterfaceXML('org.gnome.Shell.Extensions'); const ScreenSaverIface = loadInterfaceXML('org.gnome.ScreenSaver'); const ScreenTimeIface = loadInterfaceXML('org.gnome.Shell.ScreenTime'); +const BrightnessIface = loadInterfaceXML('org.gnome.Shell.Brightness'); export class GnomeShell { constructor() { @@ -585,3 +586,40 @@ export class ScreenTimeDBus { return this._manager.lastBreakEndTime; } } + +export class BrightnessDBus { + constructor(brightnessManager) { + this._manager = brightnessManager; + + this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(BrightnessIface, this); + this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell/Brightness'); + + Gio.DBus.session.own_name('org.gnome.Shell.Brightness', + Gio.BusNameOwnerFlags.NONE, null, null); + + this._manager.connectObject('changed', this._sync.bind(this), this); + this._sync(); + } + + _sync() { + const hasBrightnessControl = !!this._manager.globalScale; + if (hasBrightnessControl === this._hasBrightnessControl) + return; + + this._hasBrightnessControl = hasBrightnessControl; + this._dbusImpl.emit_property_changed('HasBrightnessControl', + new GLib.Variant('b', this._hasBrightnessControl)); + } + + SetDimming(enable) { + this._manager.dimming = enable; + } + + SetAutoBrightnessTarget(target) { + this._manager.autoBrightnessTarget = target; + } + + get HasBrightnessControl() { + return this._hasBrightnessControl; + } +}